// axios插件
import axios from 'axios';
// 可选是否插入
// store插件
import store from '@/store';
// router插件
import router from '@/router';
// 导入qs插件
// import qs from 'qs';

// 是否允许跨域时携带cookie信息[不允许]
axios.defaults.withCredentials = false;


// 设置token认证接口时，配置axios的默认表头设置【默认打开页面时是没有token】
let token = '';
axios.defaults.headers.common['Authorization'] = token;

// axios实例中配置默认的访问服务器端口
let url = 'http://127.0.0.1:8093';		//如果项目打包时，此处为空
let instance = axios.create({
	baseURL : url,
})


// 请求拦截器：在发送post/get请求之前，判断是否在本地中存储了token，如果有添加到headers内，后台会子级判断token是否过期
instance.interceptors.request.use( config=>{
	// 拦截成功的操作
	// 获取本地的token
	let token = localStorage.getItem('token');
	// 判断是否存在token
	// if(token){
		config.headers.Authorization = "bearer" + token;
	// }
	// 返回配置
	return config;
} , error=>{
	// 拦截失败的操作
	return Promise.reject(error);
})

// 相应拦截器：用于拦截后台的报错处理
instance.interceptors.response.use( response=>{
	// 向应成功
	return response;
},err=>{
	// 相应失败
	// 判断接口返回的错误是否为真
	if(err.response){
		// 判断状态码
		switch(err.response.status){
			case 401 :
				console.log( '账号或密码错误' );
				// 登陆失败，清楚之前的token
				localStorage.setItem('token' , "");
				// 返回登录页
				this.$router.push('/');
				break;
			case 403 :
				console.log('非法闯入，进入访问');
				break;
			default : 
				console.log('请求错误');
				break;
		}
	}
	// 返回接口的信息提示
	return Promise.reject( err.response.data );
})

// 导出axiso实例【没有请求封装时需要开启】
export default instance

// 请求方式的封装【不需要导出axios实例】

// get请求封装：url参数：get请求的地址：data参数：请求时拼接到地址栏的参数
// export let $get = ( url , data )=>{
// 	return instance.get( url , {
// 		params : params,
// 	})
// }

// post请求需要封装三种类型

// 1.post请求并提交json数据的函数
// url请求地址：data是提交的数据
// export let $postJson = ( url , data )=>{
// 	return instrance.post( url , data , {
// 		headers : { 'Content-Type' : 'application/json' }
// 	} )
// }

// 2.post请求并上传文件
// url请求地址：formdata含有文件上传框的表单数据对象
// export let $postUpload = ( url , formdata )=>{
// 	return instrance.post( url , formdata , {
// 		headers : { 'Content-Type' : 'multipart/form-data' }
// 	} )
// }

// 3.post请求：将提交的数据当作请求地址的参数进行提交
// url请求地址：data提交的数据
// export let $post = ( url , data )=>{
// 	// 将data的数据通过qs转换
// 	let qsdata  = qs.stringify( data );
// 	return instrance.post( url , qsdata , {
// 		headers : { 'Content-Type' : 'application/x-mmm-form-urlencoded' }
// 	} )
// }